// Package handler
// Author liuzhiyong
// Date 2023/11/21
// Description 处理订单
package handler

import (
	"context"
	"fmt"
	"gitee.com/liu_zy_developer/go_order_service/biz/order"
	"gitee.com/liu_zy_developer/go_order_service/proto"
	"github.com/apache/rocketmq-client-go/v2/consumer"
	"github.com/apache/rocketmq-client-go/v2/primitive"
	"go.uber.org/zap"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
	"google.golang.org/protobuf/types/known/emptypb"
)

type OrderSrv struct {
	proto.UnimplementedOrderServer
}

// CreateOrder 创建订单
// 生成订单号 查询商品信息（营销中心算价） 扣库存 生成支付信息 调用收货地址 通知商家
// 简化版：生成订单号 查询商品信息 扣库存
// 1. 生成订单号 2.查询商品信息 3.扣库存
func (OrderSrv) CreateOrder(ctx context.Context, req *proto.OrderReq) (*emptypb.Empty, error) {
	fmt.Println("in CreateOrder ... ")
	if req.GetUserId() <= 0 {
		// 无效的请求
		return nil, status.Error(codes.InvalidArgument, "请求参数有误")
	}
	// 业务处理
	err := order.Create(ctx, req)
	if err != nil {
		zap.L().Error("order.Create failed", zap.Error(err))
		return nil, status.Error(codes.Internal, "内部错误")
	}
	return &emptypb.Empty{}, nil
}

// OrderTimeouthandle 处理订单超时
func OrderTimeouthandle(context.Context, ...*primitive.MessageExt) (consumer.ConsumeResult, error) {
	return consumer.ConsumeSuccess, nil
}
